home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / 35mm.it.ifs next >
Encoding:
Text File  |  2004-07-11  |  9.9 KB  |  288 lines

  1. // GETINFO SCRIPTING
  2. //35mm.it - by Pivello
  3.  
  4. (**************************************************
  5. *  Movie importation script for:                  *
  6. *  35mm.it, http://www.35mm.it                    *
  7. *                                                 *
  8. * (c) 2004 Pivello                                *
  9. *                                                 *
  10. *  12.04.2004 New script for XTML->JSP migration  *
  11. *  14.04.2004 Added test for Apache Server down   *
  12. *             Removed <br> from comments field    *
  13. *  15.04.2004 Code optimization                   *
  14. *             Get film image if cover not found   *
  15. *                                                 *
  16. *  For use with Ant Movie Catalog 3.4.1           *
  17. *  www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com  *
  18. *                                                 *
  19. *  The source code of the script can be used in   *
  20. *  another program only if full credits to        *
  21. *  script author and a link to Ant Movie Catalog  *
  22. *  website are given in the About box or in       *
  23. *  the documentation of the program               *
  24. ***************************************************)
  25.  
  26. program New35mm;
  27.  
  28. const
  29.   UrlBase = 'http://www.35mm.it';
  30.   QueryBase = UrlBase + '/film/ricerca/bottom/ricercaschedafilm.jsp?titolo=';
  31.   QueryFilm = UrlBase + '/film/scheda/top/scheda.jsp?idFilm=';
  32.   QueryCast = UrlBase + '/film/scheda/bottom/cast.jsp?idFilm=';
  33.   QueryCover = UrlBase + '/film/scheda/bottom/homevideo.jsp?idFilm=';
  34.   QueryMovie = UrlBase + '/film/scheda/frameset/scheda.jsp?idFilm=';
  35.   QueryCmnts = UrlBase + '/film/scheda/bottom/recensioni.jsp?idFilm=';
  36.  
  37. var
  38.   Page: TStringList;
  39.   MovieUrl, CastUrl, FilmUrl, CoverUrl, CmntsUrl: string;
  40.   MovieName, OriginalStr, TranslatedStr, PageStr:  string;
  41.  
  42. // ---------------------------------------------
  43. // PAGE PACKING (remove extra spaces, tabs & CR)
  44. // IN:  page Url     (string)
  45. // OUT: compact page (string)
  46. // ---------------------------------------------
  47. function RemoveExtraChars(Url: string): string;
  48. var
  49.   Temp: string;
  50.   PackedPage: string;
  51.   CharPos: Integer;
  52.   n: Integer;
  53. begin
  54.   Page.Text := GetPage(Url);
  55.   for n:=0 to Page.Count-1 do
  56.    PackedPage := PackedPage + ' ' + Page.GetString(n);
  57.   repeat
  58.    CharPos := pos('  ', PackedPage);
  59.    if CharPos = 0 then
  60.     CharPos := pos(#9, PackedPage);
  61.    if CharPos <> 0 then
  62.     begin
  63.      Temp := copy(PackedPage, 1, CharPos -1);
  64.      Delete(PackedPage, 1, CharPos);
  65.      PackedPage := Temp + PackedPage;
  66.     end;
  67.   until((pos('  ', PackedPage) = 0) and (pos(#9, PackedPage) = 0));
  68.   result := PackedPage;
  69. end;
  70.  
  71. // ---------------------------------
  72. // GET FIELD VALUES FROM PACKED PAGE
  73. // IN:  Start marker     (String)
  74. //      End marker       (string)
  75. //      Cut Start Marker (bool)
  76. //      Cut End Marker   (bool)
  77. // OUT: value            (string)
  78. // ---------------------------------
  79. function GetValue(StartMarker, EndMarker: string; CutStartMarker, CutEndMarker: boolean): string;
  80. var
  81.   StartPos: integer;
  82.   EndPos: integer;
  83.   Value: string;
  84. begin
  85.   Value := '';
  86.   StartPos := pos(StartMarker, PageStr);
  87.   if (StartPos > 0) then
  88.    Delete(PageStr, 1, StartPos-1);
  89.   StartPos := pos(StartMarker, PageStr);
  90.   EndPos := pos(EndMarker, PageStr);
  91.   if ((StartPos > 0)and(EndPos > 0)) then
  92.    begin
  93.     if CutStartMarker then
  94.      StartPos := StartPos + length(StartMarker);
  95.     if not CutEndMarker then
  96.      EndPos := EndPos + length(EndMarker);
  97.     Value := copy(PageStr, StartPos, EndPos-Startpos);
  98.     Delete(PageStr, 1, EndPos);
  99.    end;
  100.   result := Value;
  101. end;
  102.  
  103. // -----------------------
  104. // ANALYZE MOVIE DATA PAGE
  105. // IN:  none
  106. // OUT: set Ant fields
  107. // -----------------------
  108. procedure AnalyzeMoviePage;
  109. var
  110.   i, h, m: integer;
  111.   Duration, Description, Cast, TempStr, TempImg, hh, mm: string;
  112. begin
  113.   // Get packed title main page
  114.   PageStr := RemoveExtraChars(FilmUrl);
  115.   // Get film image (used if cover not found)
  116.   TempImg := getValue('/immagini/film/','" width="150" height="150"',false,true);
  117.   // Translated Title field
  118.   SetField(fieldTranslatedTitle, getValue('<!-- titolo --> <b>','</b>',true,true));
  119.   // Original Title field
  120.   SetField(fieldOriginalTitle, getValue('<!-- titolo originale --> <b>','</b>',true,true));
  121.   if(GetField(fieldOriginalTitle)='')then
  122.    SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle));
  123.   // Country field
  124.   SetField(fieldCountry, getValue('<!-- nazionalitα --> ','<br>',true,true));
  125.   // Duration field
  126.   TempStr := getValue('<!--durata del film --> ','<br>',true,true);
  127.   Duration := '';
  128.   if (length(TempStr) > 0) then
  129.    begin
  130.     i := Pos('e', TempStr);
  131.     hh := copy(TempStr, 1, i - 3);
  132.     mm := copy(TempStr, i + 2, Length(TempStr) - i - 2);
  133.     h := StrToInt(hh, 2);
  134.     m := StrToInt(mm, 2);
  135.     Duration := IntToStr(h * 60 + m);
  136.    end;
  137.   SetField(fieldLength, Duration);
  138.   // Category Field
  139.   SetField(fieldCategory, getValue('<!-- genere --> <b>','</b>',true,true));
  140.   // Director Field
  141.   SetField(fieldDirector, getValue('target="_top">','</a>',true,true));
  142.   // YearField
  143.   SetField(fieldYear, getValue('<!-- anno --> Anno: ','<br>',true,true));
  144.   // Producer Field
  145.   SetField(fieldProducer, getValue('target=''_TOP''>','</a>',true,true));
  146.   // Description Field
  147.   Description := '';
  148.   repeat
  149.    TempStr := getValue('<span class="trecinque_dat">','<br>',true,true);
  150.    Description := Description + TempStr+ ' ';
  151.   until(TempStr='');
  152.   SetField(fieldDescription, Description);
  153.   // Actors Field
  154.   PageStr := RemoveExtraChars(CastUrl); // Get packed Cast page
  155.   PageStr := Copy(PageStr,1,pos('<!-- end list cast -->',PageStr));
  156.   Cast := '';
  157.   repeat
  158.    TempStr := Trim(getValue('target="_top">','</a>',true,true));
  159.    if ((Cast<>'') and (TempStr<>'')) then
  160.     Cast := Cast + ', ';
  161.    Cast := Cast + TempStr;
  162.   until((TempStr='')or(Length(TempStr)>20));
  163.   if Cast = '' then
  164.   begin
  165.    PageStr := RemoveExtraChars(CastUrl);
  166.    Delete (PageStr,1,pos('<!-- produzione -->',PageStr));
  167.    Cast := Trim(getValue('</span><br>','<br> </td>',true,true));
  168.   end;
  169.   SetField(fieldActors, Cast);
  170.   // image
  171.   PageStr := RemoveExtraChars(CoverUrl); // Get packed cover page
  172.   TempStr := getValue('/immagini/','" align="',false,true);
  173.   if TempStr = '' then
  174.    TempStr := TempImg;
  175.   GetPicture(UrlBase + TempStr, False);
  176.   // Size Field
  177.   SetField(fieldSize, getValue('Supporto: <span class="trecinque_dat_scuro_nobold">','</span>',true,true));
  178.   // Comments Field
  179.   PageStr := RemoveExtraChars(CmntsUrl); // Get packed comments page
  180.   Delete (PageStr,1,pos('<!-- recensioni redazione esplose -->',PageStr));
  181.   TempStr := getValue('<td class="trecinque_dat_scuro_nobold">','<br> <br>',true,true);
  182.   HTMLRemoveTags(TempStr);
  183.   SetField(fieldComments, TempStr);
  184.   // Movie URL field
  185.   SetField(fieldURL, MovieUrl);
  186.   // Display search result
  187.   DisplayResults;
  188. end;
  189.  
  190. // ------------------------------------------------------------------
  191. // FILL PICKTREE CONTROL WITH LINKS & TITLES or RETURN ONE PAGE LINK
  192. // if OneFilm flag true return Film Id else populate PickTree
  193. // IN:  OneFilm flag (bool)
  194. // OUT: one page ID  (string)
  195. // ------------------------------------------------------------------
  196. function PopulatePickTree(OneFilm: boolean): string;
  197. var
  198.   TempIdFilm: string;
  199.   TempTitle: string;
  200.   StartPos: integer;
  201.   EndPos: integer;
  202. begin
  203.   if OneFilm then
  204.    begin
  205.     StartPos := pos('/film/scheda.jsp?idFilm=', PageStr);
  206.     EndPos := pos(''' target=''_top''', PageStr);
  207.     if StartPos > 0 then
  208.      begin
  209.       TempIdFilm := copy(PageStr, StartPos + 24, EndPos-Startpos-24);
  210.       result := QueryMovie + TempIdFilm;
  211.      end
  212.    end
  213.   else
  214.    begin
  215.     PickTreeClear;
  216.     repeat
  217.      StartPos := pos('<a href="/film/scheda.jsp?idFilm=', PageStr);
  218.      EndPos := pos('" target="_top"', PageStr);
  219.      if StartPos > 0 then
  220.       begin
  221.        TempIdFilm := copy(PageStr, StartPos + 33, EndPos-Startpos-33);
  222.        Delete(PageStr, 1, EndPos);
  223.        StartPos := pos('">', PageStr);
  224.        EndPos := pos('</a>', PageStr);
  225.        TempTitle := copy(PageStr, StartPos + 3, EndPos-Startpos-4);
  226.        PickTreeAdd(TempTitle, QueryMovie + TempIdFilm);
  227.       end;
  228.     until(StartPos = 0);
  229.     result := '';
  230.    end
  231. end;
  232.  
  233. // ---------------------------------
  234. // ANALYZE FIRST SEARCH RESULT PAGE:
  235. // IN:  page Url (string)
  236. // OUT: none
  237. // ---------------------------------
  238. procedure AnalyzeSearchPage(Url: string);
  239. var
  240.   FilmId: string;
  241. begin
  242.   PageStr := RemoveExtraChars(Url);
  243.   if pos('Nessun film trovato.', PageStr) > 0 then
  244.     ShowMessage('Title not found / Nessun film trovato.')
  245.   else if pos('Si Φ verificato un errore',PageStr) > 0 then
  246.     ShowMessage('Server not available, try later / Server non disponibile, prova pi∙ tardi')
  247.   else
  248.    begin
  249.     if pos('Risultato della ricerca:', PageStr) = 0 then
  250.      MovieUrl := PopulatePickTree(true)  // One title found
  251.     else
  252.      begin
  253.       PopulatePickTree(false);           // More titles found..
  254.       if not PickTreeExec(MovieUrl) then // ..select one
  255.        exit;
  256.      end
  257.     FilmId := Copy(MovieUrl,59,20);      // get film id from movie url
  258.     FilmUrl := QueryFilm + FilmId;
  259.     CastUrl := QueryCast + FilmId;
  260.     CoverUrl := QueryCover + FilmId;
  261.     CmntsUrl := QueryCmnts + FilmId;
  262.     AnalyzeMoviePage;
  263.    end;
  264. end;
  265.  
  266. // ----------
  267. // MAIN:
  268. // IN:  none
  269. // OUT: none
  270. // ----------
  271. begin
  272.   if CheckVersion(3,4,1) then
  273.    begin
  274.     TranslatedStr := GetField(fieldTranslatedTitle);
  275.     OriginalStr := GetField(fieldOriginalTitle);
  276.     if (TranslatedStr <> '') then MovieName := TranslatedStr else MovieName := OriginalStr;
  277.     if (Input('35mm.it - By Pivello', 'Enter the title of the movie / Inserire titolo del film:', MovieName)) then
  278.      begin
  279.       Page := TStringList.Create;
  280.       MovieUrl := QueryBase + UrlEncode(MovieName);
  281.       AnalyzeSearchPage(MovieUrl);
  282.       Page.Free;
  283.      end;
  284.    end
  285.   else
  286.    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
  287. end.
  288.